08 - 评测与接回推理框架
专题的最后一篇,两件事:给模型打个分,然后把权重交给自制推理框架跑起来。
第二件事是整个专题的收口。训练和推理两条线在这里接上,说明这个模型不只是训练脚本里的一堆张量,而是一个真能被独立加载、独立跑的东西。
前置:06 或 07 篇产出的 checkpoint。
零、开始之前:为什么要评测
0.1 loss 低不代表模型好
03 篇一直盯着 loss,它确实是训练是否正常的核心指标。但 loss 有个根本局限:它衡量的是模型对训练分布的拟合程度,不是模型有多好用。
一个只在中文网页上训的模型,在中文网页上 loss 会很低,但它可能完全不会做数学题。loss 不会告诉你这件事。
评测就是拿一些外部的、有标准答案的任务去问模型,看它答得怎么样。
0.2 评测要回答三个问题
| 问题 | 用什么测 |
|---|---|
| 训练有没有真的学到东西 | 困惑度,跟随机初始化和早期 checkpoint 比 |
| 有没有学到具体知识 | 选择题评测(MMLU、C-Eval) |
| 后训练有没有起作用 | 对比 base / SFT / DPO 三个模型的输出 |
0.3 先把预期放对:0.5B 能到什么水平
这一节决定了如何解读评测结果。
0.5B 的模型在知识类评测上,成绩大概率接近随机猜。 MMLU 和 C-Eval 都是四选一,随机基线 25%,0.5B 训 10B token 通常也就在 25% 到 30% 之间。
这不是训错了,是规模决定的。这类评测考的是世界知识,而知识的容量跟参数量强相关。0.5B 装不下那么多东西。
那还测什么。测这几样:
- 困惑度在下降,说明预训练有效
- HellaSwag 这类常识补全比随机好,说明学到了语言规律(它考的是「哪个续写更合理」,不是硬知识)
- base / SFT / DPO 的输出差异肉眼可见,说明后训练链路是通的
最实在的验收是最后那条:同一个问题问三个模型,base 在续写、SFT 在回答、DPO 答得更整齐。这个对比能证明整条链路是通的,比一个 27% 的 MMLU 分数有意义得多。
一、评测分两大类
1.1 判别式:选择题
给题干和几个选项,让模型挑一个。MMLU、C-Eval、HellaSwag 都是这类。
好处是判分完全客观,不需要另一个模型或人来评价。这一篇主要讲这类。
1.2 生成式:让模型自由回答
比如 GSM8K 数学题,模型要写出解题过程和答案。判分要么用规则抽取最终答案比对,要么请一个更强的模型当裁判。
0.5B 做不了这类任务,这一篇不展开。
二、选择题怎么算分
2.1 不要让模型生成字母
最直觉的做法是把题目和选项拼好,让模型生成,看它输出的是不是 "B"。
这个做法对小模型完全不适用。 0.5B 的模型经常连一个合法的选项字母都吐不出来,它可能输出「答案是」「我认为」,或直接续写题干。
这样一来,「不会答」和「格式不对」就被混为一谈了,测出来的分数没有意义。
2.2 正确做法:比较四个选项的对数概率
把每个选项分别拼到题干后面,算模型给这个选项的对数概率,谁高选谁:
prompt = "中国的首都是哪里?\nA. 上海\nB. 北京\nC. 广州\nD. 深圳\n答案:"